%% Assembly B matrix - DeFaria Thesis 2004

function [gradB] = assemblyGradBMatrix (x_sample , x_nodes , order, gradWeights , poliBaseType)

% x_sample : punto 2D en donde quiero evaluar B
% x_nodes  : conjunto de puntos 2D donde evalúo los polinomios base
%
% w: vector de "window functions" del nodo x_sample con respecto a los
% x_nodes

nPt = size ( x_nodes(:,1) );
nPts = nPt(1);
dimension = size(x_sample,2);

nBaseElements = getPolibaseDimension(order);
gradB = zeros(nPts,nBaseElements,dimension);

for d=1:dimension;
    P = zeros(nPts,nBaseElements);
    %B = zeros(nBaseElements,nPts);
    W = zeros(nPts);

    for i=1:nPts    
        P(i,:) = poliBase (x_nodes(i,:),order,poliBaseType);
        W(i,i) = gradWeights(i,d);
    end

    B = W * P;
    
    gradB(:,:,d) = B(:,:);
end

end